/****************************************************************
* Created by Jimmy on 2025/2/24.
****************************************************************/

#ifndef TRIAL_CMAKE_MPU6050_H
#define TRIAL_CMAKE_MPU6050_H

#include "i2c.h"

#define MPU6050_ADDRESS         0xD0
#define	MPU6050_SMPLRT_DIV		0x19
#define	MPU6050_CONFIG			0x1A
#define	MPU6050_GYRO_CONFIG		0x1B
#define	MPU6050_ACCEL_CONFIG	0x1C

#define	MPU6050_ACCEL_XOUT_H	0x3B  //X轴加速度测量值高位
#define	MPU6050_ACCEL_XOUT_L	0x3C  //X轴加速度测量值低位
#define	MPU6050_ACCEL_YOUT_H	0x3D  //Y轴加速度测量值高位
#define	MPU6050_ACCEL_YOUT_L	0x3E  //Y轴加速度测量值低位
#define	MPU6050_ACCEL_ZOUT_H	0x3F  //Z轴加速度测量值高位
#define	MPU6050_ACCEL_ZOUT_L	0x40  //Z轴加速度测量值低位
#define	MPU6050_TEMP_OUT_H		0x41  //温度测量值高位
#define	MPU6050_TEMP_OUT_L		0x42  //温度测量值低位
#define	MPU6050_GYRO_XOUT_H		0x43
#define	MPU6050_GYRO_XOUT_L		0x44
#define	MPU6050_GYRO_YOUT_H		0x45
#define	MPU6050_GYRO_YOUT_L		0x46
#define	MPU6050_GYRO_ZOUT_H		0x47
#define	MPU6050_GYRO_ZOUT_L		0x48

#define	MPU6050_PWR_MGMT_1		0x6B
#define	MPU6050_PWR_MGMT_2		0x6C
#define	MPU6050_WHO_AM_I		0x75

typedef struct{
    // 角速度
    int16_t Accel_X;
    int16_t Accel_Y;
    int16_t Accel_Z;
    // 角度
    int16_t Gyro_X;
    int16_t Gyro_Y;
    int16_t Gyro_Z;
    // 温度
    int16_t Temp;
}MPU6050DATATYPE;

void mpu6050_init();
void MPU6050_WriteReg(uint8_t RegAddress, uint8_t* Data,uint16_t length);
void MPU6050_ReadReg(uint8_t RegAddress, uint8_t* Data,uint16_t length);
MPU6050DATATYPE MPU6050_GetData();
void MPU6050_acquire();
uint8_t MPU6050_GetID();


#endif //TRIAL_CMAKE_MPU6050_H
